package org.deng.learn.async;

import java.util.concurrent.TimeUnit;

/**
 * @author 邓力宾
 * @date 2020/12/23 9:39
 * @desc
 */
public class MyExecutor {

    /**
     * 异步执行任务，返回future
     * @param param
     * @return
     */
    public MyFuture<String> execute(String param){
       //创建一个future对象（匿名内部类的方式），复写 onComplete方法。然后返回这个future, 调用者再调用onComplete方法
       return consumer -> {
           //调用者调用onComplete方法后进入到这里，并传入了一个Consumer消费者参数进来
           //doSomething, 执行任务,可以同步也可以异步执行（单独开辟一个线程）
           System.out.println("任务开始");
           //任务执行完成，调用消费者的accept方法，将结果通过参数传给消费者。
           TimeUnit.SECONDS.sleep(3); //模拟任务执行时间
           System.out.println("任务结束,执行回调");
           consumer.accept(new AsyncResult<String>() {
               @Override
               public String getResult() {
                   return "success";
               }
               @Override
               public boolean isSucceed() {
                   return true;
               }
           });
       };
    }
}
